package xyccontroller

import (
	"Cgo/common"
	"Cgo/front/dto"
	"Cgo/front/models"
	"Cgo/global"
	"strconv"

	"github.com/gin-gonic/gin"
)

func XycUserController(r *gin.RouterGroup) {
	r.POST("/login", common.HandlerFunc(userLogin))
	r.POST("/register", common.HandlerFunc(userRegister))
	r.GET("/find", common.HandlerFunc(findUser))
	r.DELETE("/delete", common.HandlerFunc(deleteUser))
	r.POST("/updateUserInfo", common.HandlerFunc(updateUserInfo))
}

// userLogin 用户登录
// @Summary 用户登录
// @Tags xyc_shop前台接口
// @Accept json
// @Produce json
// @Param user body models.XycUser true "用户信息"
// @Success 200 {object} common.RT[models.XycUser]
// @Router /front/xyc/user/login [post]
func userLogin(ctx *gin.Context) common.Result {
	var user models.XycUser
	if err := ctx.ShouldBindJSON(&user); err != nil {
		return common.R.Fail(err.Error())
	}
	// user, err := UserService.Login(user)
	user, err := UserDao.UserLoginDao(user)
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success(user)
}

// userRegister 用户注册
// @Summary 用户注册
// @Tags xyc_shop前台接口
// @Accept json
// @Produce json
// @Param user body models.XycUser true "用户信息"
// @Success 200 {object} common.RT[string]
// @Router /front/xyc/user/register [post]
func userRegister(ctx *gin.Context) common.Result {
	var user dto.XycUserRegisterDto
	if err := ctx.ShouldBindJSON(&user); err != nil {
		return common.R.Fail(err.Error())
	}
	userModel := models.XycUser{
		Name:     user.Name,
		Password: user.Password,
		Account:  user.Account,
		Sex:      user.Sex,
		Sign:     user.Sign,
	}
	err := UserDao.UserRegisterDao(userModel)
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success("注册成功")
}

// 查找用户
// @Summary 查找用户
// @description 根据id查找用户,不传id则查找所有用户
// @Tags xyc_shop前台接口
// @Accept json
// @Produce json
// @Param id query int false "用户id"
// @Success 200 {object} common.RT[[]models.XycUser]
// @Router /front/xyc/user/find [get]
func findUser(ctx *gin.Context) common.Result {
	idStr := ctx.Query("id")
	var id int
	if idStr != "" {
		id, _ = strconv.Atoi(idStr)
	}
	global.Logger.Info("id:", id)
	users, err := UserDao.UserFindDao(models.XycUser{Id: id})
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success(users)
}

// 删除用户
// @Summary 删除用户
// @description 根据id删除用户
// @Tags xyc_shop前台接口
// @Accept json
// @Produce json
// @Param id query int true "用户id"
// @Success 200 {object} common.RT[string]
// @Router /front/xyc/user/delete [delete]
func deleteUser(ctx *gin.Context) common.Result {
	idStr := ctx.Query("id")
	id, _ := strconv.Atoi(idStr)
	err := UserDao.UserDeleteDao(models.XycUser{Id: id})
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success("删除成功")
}

// 修改用户信息
// @Summary 修改用户信息
// @description 修改用户信息
// @Tags xyc_shop前台接口
// @Accept json
// @Produce json
// @Param user body models.XycUser true "用户信息"
// @Success 200 {object} common.RT[string]
// @Router /front/xyc/user/updateUserInfo [post]
func updateUserInfo(ctx *gin.Context) common.Result {
	var user models.XycUser
	if err := ctx.ShouldBindJSON(&user); err != nil {
		return common.R.Fail(err.Error())
	}
	err := UserDao.UserUpdateDao(user)
	if err != nil {
		return common.R.Fail(err.Error())
	}
	return common.R.Success("修改成功")
}
